package cn.icatw.leetcode.editor.cn;
// 给定整数数组 nums 和整数 k，请返回数组中第 k 个最大的元素。
//
// 请注意，你需要找的是数组排序后的第 k 个最大的元素，而不是第 k 个不同的元素。
//
// 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
//
//
//
// 示例 1:
//
//
// 输入: [3,2,1,5,6,4], k = 2
// 输出: 5
//
//
// 示例 2:
//
//
// 输入: [3,2,3,1,2,4,5,5,6], k = 4
// 输出: 4
//
//
//
// 提示：
//
//
// 1 <= k <= nums.length <= 10⁵
// -10⁴ <= nums[i] <= 10⁴
//
//
// Related Topics 数组 分治 快速选择 排序 堆（优先队列） 👍 2524 👎 0


import java.util.PriorityQueue;

// Java：数组中的第K个最大元素
public class T215_KthLargestElementInAnArray {
    public static void main(String[] args) {
        Solution solution = new T215_KthLargestElementInAnArray().new Solution();
        // TO TEST
        solution.findKthLargest(new int[]{3, 2, 1, 5, 6, 4}, 2);
    }

    // leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int findKthLargest(int[] nums, int k) {
            //     使用小堆
            PriorityQueue<Integer> heap = new PriorityQueue<>(k);
            for (int num : nums) {
                heap.add(num);
                if (heap.size() > k) {
                    heap.poll();
                }
            }
            return heap.peek();
        }
    }
// leetcode submit region end(Prohibit modification and deletion)

}
